﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CruzDelSur.Dominio;
using NHibernate;
using NHibernate.Criterion;

namespace CruzDelSur.Persistencia
{
    public class FlotaPasajeroDAO : BaseDAO<FlotaPasajero, string>, IFlotaPasajeroDAO
    {
        public ICollection<FlotaPasajero> obtenerListado()
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                ICollection<FlotaPasajero> resultado = sesion.CreateCriteria<FlotaPasajero>()
                    .List<FlotaPasajero>();
                return resultado;
            }
        }

        public ICollection<FlotaPasajero> listadoFlotaPasajero()
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                ICollection<FlotaPasajero> resultado = sesion
                    .CreateSQLQuery("SELECT SE_TB_Flota_Pasajero_codUnidadTransporte as Codigo, codServicio as Servicio,fecBaja as Fecha_Baja,estflota as Estado FROM SE_TB_Flota_Pasajero")
                    .SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(FlotaPasajero)))
                    .List<FlotaPasajero>();
                return resultado;
            }
        }

        //Agregado por Victor
        public ICollection<FlotaPasajero> obtenerListadoPendientes()
        {
            ICollection<FlotaPasajero> resultado = this.Listar(
                DetachedCriteria.For<FlotaPasajero>().Add(
                    Restrictions.Eq("Estado", FlotaPasajero.PENDIENTE)
                   )
                );
            return resultado;
        }

        public void cambiarEstadoFlotaPasajero(string codUnid, string codServ, string estado)
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                int r = sesion
                   .CreateQuery("update from FlotaPasajero set Estado=:est where CodigoUnidadTransporte=:codUni and CodigoServicio=:codSer")
                   .SetString("codUni", codUnid)
                   .SetString("codSer", codServ)
                   .SetString("est", estado)
                   .ExecuteUpdate();
            }
        }

        public FlotaPasajero obtenerFlotaPasajero(string codUnid, string codServ)
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                IList<FlotaPasajero> resultado = sesion
                    .CreateQuery("from FlotaPasajero where CodigoUnidadTransporte=:codUni and CodigoServicio=:codSer")
                    .SetParameter("codUni", codUnid)
                    .SetParameter("codSer", codServ)
                    .List<FlotaPasajero>();
                if (resultado.Count > 0)
                {
                    FlotaPasajero f = resultado[0];
                    return f;
                }
                return null;
            }
        }

    }
}